"""
元组tuple
- 元组可以封装多个不同类型的元素
- 但是元组一但定义完成，就不可修改（和列表的区别）
  假设元组里面嵌套了list，但是这个list是可以修改的
- 元组使用小括号定义数据
- 定义单个元素的元组,后面必须加上逗号，不然就不是元组
"""

# 定义元组
t1 = (1,"hello","world")
t2 = ()  # 空元组
t3 = tuple()  # 空元组
print(f"t1的类型是：{type(t1)},内容是：{t1}")
print(f"t2的类型是：{type(t2)},内容是：{t2}")
print(f"t3的类型是：{type(t3)},内容是：{t3}")

# 定义单个元素的元组,后面必须加上逗号，不然就不是元组
t4 = ("hello")
print(f"t4的类型是：{type(t4)},内容是：{t4}")  # <class 'str'>
t5 = ("hello",)
print(f"t5的类型是：{type(t5)},内容是：{t5}")  # <class 'tuple'>

t1 = (1,"hello","world")
# 通过下标索引取出内容
x = t1[0]
print(f"元组通过下标获取的元素是：{x}")

# 查找某个元素所对应的下标
index = t1.index("hello")
print(f"元组中hello所对应的下标是：{index}")

# 统计某个元素在当前元组中出现的次数
t1 = (1,2,1,2,4,3,2)
count = t1.count(1)
print(f"统计1在元组中出现的次数是：{count}")

# 统计元组内元素的个数
t1 = (1,2,1,2,4,3,2)
count = len(t1)
print(f"元组中所有元素的个数是：{count}")

# while遍历元组
def tuple_while_func():
    """
    使用while循环遍历元组
    :return: None
    """
    t1 = (1,2,3,4)
    i = 0
    while i<len(t1):
        print(t1[i])
        i+=1
tuple_while_func()

#for循环遍历元组
def tuple_for_func():
    """
    使用for循环遍历元组
    :return: None
    """
    t1 = (1,2,3,4)
    for i in t1:
        print(i)
tuple_for_func()

# 假设元组里面嵌套了一个列表，列表是可以修改的
t1 = (1,[2,3],4)
t1[1][1]=99
print(f"修改元组里嵌套的列表的元素，结果是：{t1}")

# 小练习
t = ('周杰伦',11,['football','music'])
index = t.index(11)
print(f"年龄所在的下标：{index}")
name = t[0]
print(f"学生的姓名是：{name}")
t[2].remove('football')
print(f"删除学生爱好中的football的结果是：{t}")
t[2].append('coding')
print(f"增加爱好coding到list之后的结果是：{t}")